/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.ingsoc2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 *
 * @author sebastian
 */
public class CalculatorController {

    private CalculadoraViewSwing calcView;
    private Calculadora modeloCalc;

    /**
     *
     * @param vista
     * @param modelo
     */
    CalculatorController(CalculadoraViewSwing vista, Calculadora modelo) {
        this.calcView = vista;
        this.modeloCalc = modelo;

        this.calcView.agregarListenerCmdSumar(new lstSumar(vista, modelo));
        this.calcView.agregarListenerCmdDividir(new lstDividir(vista, modelo));
        this.calcView.agregarListenerCmdMultiplicar(new lstMultiplicar(vista, modelo));
        this.calcView.agregarListenerCmdRestar(new lstRestar(vista, modelo));

        this.calcView.mostrarCalculadora(modeloCalc);
    }
}

/**
 *
 * @author sebastian
 */
class lstSumar implements ActionListener {

    private CalculadoraViewSwing calcView;
    private Calculadora modeloCalc;

    public lstSumar(CalculadoraViewSwing vista, Calculadora modelo) {
        this.calcView = vista;
        this.modeloCalc = modelo;

    }

    public void actionPerformed(ActionEvent e) {
        Double numA, numB, resultado;
        try {
            numA = calcView.getTxtCampo1();
            numB = calcView.getTxtCampo2();
            resultado = modeloCalc.sumar(numA, numB);
            calcView.mostrarResultado(resultado.toString());
        } catch (NumberFormatException ex) {
            calcView.mostrarError("Esto falló:" + ex.getLocalizedMessage());
        }
    }

}

class lstRestar implements ActionListener {

    private CalculadoraViewSwing calcView;
    private Calculadora modeloCalc;

    public lstRestar(CalculadoraViewSwing calcView, Calculadora modeloCalc) {
        this.calcView = calcView;
        this.modeloCalc = modeloCalc;
    }

    Double numA, numB, resultado;

    public void actionPerformed(ActionEvent e) {
        try {
            numA = calcView.getTxtCampo1();
            numB = calcView.getTxtCampo2();
            resultado = modeloCalc.restar(numA, numB);
            calcView.mostrarResultado(resultado.toString());
        } catch (NumberFormatException ex) {
            calcView.mostrarError("Esto falló:" + ex.getLocalizedMessage());
        }

    }
}

class lstMultiplicar implements ActionListener {

    public lstMultiplicar(CalculadoraViewSwing calcView, Calculadora modeloCalc) {
        this.calcView = calcView;
        this.modeloCalc = modeloCalc;
    }
    private CalculadoraViewSwing calcView;
    private Calculadora modeloCalc;

    Double numA, numB, resultado;

    public void actionPerformed(ActionEvent e) {
        try {
            numA = calcView.getTxtCampo1();
            numB = calcView.getTxtCampo2();
            resultado = modeloCalc.multiplicar(numA, numB);
            calcView.mostrarResultado(resultado.toString());
        } catch (NumberFormatException ex) {
            calcView.mostrarError("Esto falló:" + ex.getLocalizedMessage());
        }

    }
}

class lstDividir implements ActionListener {
    private CalculadoraViewSwing calcView;
    private Calculadora modeloCalc;
    
    public lstDividir(CalculadoraViewSwing calcView, Calculadora modeloCalc) {
        this.calcView = calcView;
        this.modeloCalc = modeloCalc;
    }
    
    public void actionPerformed(ActionEvent e) {
        Double numA, numB, resultado;
        try {
            numA = calcView.getTxtCampo1();
            numB = calcView.getTxtCampo2();
            resultado = modeloCalc.division(numA, numB);
            calcView.mostrarResultado(resultado.toString());
        }  catch (NumberFormatException ex) {
            calcView.mostrarError("Formato:" + ex.getLocalizedMessage());
        
        }catch(CalculaExcepcion ex){
            calcView.mostrarError("Imposible dividir por 0");
        }
        
    }

}
